package date0702pm;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import cn.edu.ecut.util.DatabaseType;
import cn.edu.ecut.util.JdbcHelper;

public class JdbcTest08 {

	public static void main(String[] args) throws SQLException {
		
		boolean op = true ;
		
		JdbcHelper helper = JdbcHelper.getInstance( DatabaseType.MYSQL );
		Statement st = helper.create();
		
		String DQL = "SELECT id AS user_id , name FROM t_users" ;
		String DML = "INSERT INTO t_users ( name ) VALUES ( '张翠山' ) , ( '殷素素' ) , ( '张无忌' )" ; 
		boolean r = st.execute( op ? DQL : DML , Statement.RETURN_GENERATED_KEYS ) ;
		System.out.println( "execute : " + r  );
		
		if( r ) { // 如果 execute 方法执行后的返回值为 true
			System.out.println( "第一个结果【是】 ResultSet" );
			
			ResultSet rs = st.getResultSet();
			while( rs.next() ) {
				// 根据 列名 或 列的别名 确定列的索引后，再根据索引获取指定列的值
				int id = rs.getInt( "user_id" ); // 如果查询时，某个列使用了别名，则这里必须使用 列的别名
				String name = rs.getString( "name" ); 
				System.out.println( id + " : " + name );
			}
			helper.close( rs );
		} else { // 如果 execute 方法执行后的返回值为 false
			System.out.println( "第一个结果【不是】 ResultSet" );
			
			// long getLargeUpdateCount()  [ JDK 1.8 新增的方法 ]
			// int getUpdateCount()
			int count = st.getUpdateCount() ;  // 获取受DML语句影响的记录数 或 返回 DDL执行后的结果( 结果是零 )
			System.out.println( "受影响记录数: " + count );
			
			ResultSet generatedKeys = st.getGeneratedKeys();
			while( generatedKeys.next() ) {
				int id = generatedKeys.getInt( 1 ); // 根据列的索引获取改行指定列的值
				System.out.println( "id : " + id );
			}
			helper.close( generatedKeys );
		}
		
		
		helper.close( st );
		helper.release();

	}

}
